import {BASEURL} from '@/config/baseUrl';

//暂时这么写 可能需要根据实际情况再处理一下
/**
 * @param {url[string]}          请求业务路径地址
 * @param {data[object]}         请求参数
 * @param {showLoading[boolean]} 显示加载中loadling   默认显示
 * @param {showError[boolean]}   是否实现错误弹出提示 默认显示
 * @param {restParams[object]}   后续可拓展参数
 * @return {res[object]}
 */
export function httpReq({
  url,
  data = {},
  method = 'POST',
  showLoading = true,
  showError = true,
  ...restParams
}) {
  showLoading &&
    uni.showLoading({
      title: '加载中',
    });
  return new Promise((resolve, reject) => {
    uni.request({
      url: BASEURL + url, //由基础路径和接口地址
      method, //请求的方式必须大写
      data, //参数
      header: {
        'Content-Type': 'application/json',
        //'Authorization':"携带的token"
      },
      // 成功使用resolve
      success: (res) => {
        if (res.data && res.data.success) { 
          resolve(res);
        } else {
          /**
           * 请求失败，是否要提示出来;
           * showError: true,开启错误提示
           *  showError: false,关闭错误提示
           * */
          if (showError) {
            errorFun(res);
          }
          resolve(res);
        }
      },
      //失败调用reject，
      fail: (err) => {
        // 失败做处理
        if (showError) {
          errorFun(res);
        }
        reject(err);
      },
      //完成回调
      complete:()=>{
        showLoading&&uni.hideLoading();
      }
    });
  });
}

// 错误处理
const errorFun = (error) => {
  if (error) {
    switch (error.data.code) {
      case 401:
        uni.showToast({
          title: '没有权限',
          icon: 'none',
          duration: 1000,
        });
        break;

      case 403:
        uni.showToast({
          title: '拒绝访问',
          icon: 'none',
          duration: 1000,
        });
        break;

      case 404:
        uni.showToast({
          title: '很抱歉，资源未找到!',
          icon: 'none',
          duration: 1000,
        });
        break;

      case 500:
        uni.showToast({
          title: '没有权限',
          icon: 'none',
          duration: 1000,
        });
        break;

      case 502:
        uni.showToast({
          title: '服务器异常',
          icon: 'none',
          duration: 1000,
        });
        break;

      case 504:
        uni.showToast({
          title: '网络超时',
          icon: 'none',
          duration: 1000,
        });
        break;

      default:
        uni.showToast({
          title: '网络错误',
          icon: 'none',
          duration: 1000,
        });
        break;
    }
  }
};
